package com.ssm.sport.service;

import com.ssm.sport.entity.Cart;
import com.ssm.sport.vo.CartVO;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;
import java.util.Map;

/**
 * 购物车服务接口
 */
public interface CartService extends IService<Cart> {

    /**
     * 获取购物车列表
     * @param userId 用户ID
     * @return 购物车列表
     */
    List<Map<String, Object>> getCartList(Integer userId);
    
    /**
     * 获取购物车视图对象列表
     * @param userId 用户ID
     * @return 购物车视图对象列表
     */
    List<CartVO> getCartVOList(Integer userId);
    
    /**
     * 更新所有购物车项的选中状态
     * @param userId 用户ID
     * @param checked 是否选中
     * @return 更新结果
     */
    int updateCheckedByUserId(Integer userId, Integer checked);

    /**
     * 显示购物车内容
     * @param userId 用户ID
     * @return 购物车商品视图列表和总价格
     */
    Map<String, Object> showCart(Integer userId);

    /**
     * 添加商品到购物车
     * @param userId 用户ID
     * @param productId 商品ID
     * @param count 数量
     * @return 添加结果
     */
    int addToCart(Integer userId, Integer productId, Integer count);

    /**
     * 更新购物车商品数量
     * @param userId 用户ID
     * @param productId 商品ID
     * @param count 数量
     * @return 更新结果
     */
    int updateCart(Integer userId, Integer productId, Integer count);

    /**
     * 删除购物车商品
     * @param userId 用户ID
     * @param productId 商品ID
     * @return 删除结果
     */
    int deleteFromCart(Integer userId, Integer productId);

    /**
     * 选择购物车商品
     * @param userId 用户ID
     * @param productId 商品ID
     * @param checked 是否选中
     * @return 选择结果
     */
    int selectProduct(Integer userId, Integer productId, Integer checked);

    /**
     * 全选/取消全选购物车
     * @param userId 用户ID
     * @param checked 是否选中
     * @return 选择结果
     */
    int selectAllProducts(Integer userId, Integer checked);

    /**
     * 获取用户购物车中已选中的商品
     * @param userId 用户ID
     * @return 已选中的购物车商品列表
     */
    List<CartVO> getCheckedCartItems(Integer userId);

    /**
     * 清空用户购物车
     * @param userId 用户ID
     */
    void clearCart(Integer userId);
} 